package com.tedu.food.sys.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.tedu.food.common.config.PageProperties;
import com.tedu.food.common.exception.ServiceException;
import com.tedu.food.common.vo.GoodsVo;
import com.tedu.food.common.vo.PageObject;
import com.tedu.food.sys.dao.CartItemDao;
import com.tedu.food.sys.dao.GoodsDao;
import com.tedu.food.sys.entity.Category;
import com.tedu.food.sys.entity.Goods;
import com.tedu.food.sys.service.GoodsService;

/***
 * Goods(商品service接口实现类)
 * 
 * @version 创建时间：2019年11月22日 下午17:01:41
 */
@Service
public class GoodsServiceImpl implements GoodsService {
	@Autowired
	private GoodsDao goodsDao;

	@Autowired
	private CartItemDao cartItemDao;
	@Autowired
	private PageProperties pageProperties;

	@Override
	public int deleteGoodsObjectById(Integer... ids) {
		// 1.判定参数合法性
		if (ids == null || ids.length == 0)
			throw new IllegalArgumentException("请选择一个");
		// 2.执行删除操作
		int rows;
		try {
			rows = goodsDao.deleteGoodsObjectById(ids);
		} catch (Throwable e) {
			e.printStackTrace();
			// 发出报警信息(例如给运维人员发短信)
			throw new ServiceException("系统故障，正在恢复中...");
		}
		// 4.对结果进行验证
		if (rows == 0)
			throw new ServiceException("记录可能已经不存在");
		// 5.返回结果
		return rows;
	}

	@Override
	public int updateGoodsObject(Goods goods) {
		if (goods == null)
			throw new IllegalArgumentException("修改对象不能为空");
		if (goods.getGoodsName() == null || StringUtils.isEmpty(goods.getGoodsName()))
			throw new IllegalArgumentException("菜单名不能为空");
		int rows = goodsDao.updateGoodsObject(goods);
		if (rows == 0)
			throw new ServiceException("记录可能已经不存在");
		return rows;
	}

	/**
	 * 
	 */
	@Override
	public PageObject<GoodsVo> findPageObjects(String goodsName, Integer pageCurrent, Integer categoryId) {
		// 1.验证参数合法性
		// 1.1验证pageCurrent的合法性，
		// 不合法抛出IllegalArgumentException异常
		if (pageCurrent == null || pageCurrent < 1)
			throw new IllegalArgumentException("当前页码不正确");
		// 2.基于条件查询总记录数
		// 2.1) 执行查询
		int rowCount = goodsDao.getRowCount(goodsName, categoryId);
		// 2.2) 验证查询结果，假如结果为0不再执行如下操作
		if (rowCount == 0)
			throw new ServiceException("系统没有查到对应记录");
		// 3.基于条件查询当前页记录(pageSize定义为2)
		// 3.1)定义pageSize
		int pageSize = pageProperties.getPageSize();
		// 3.2)计算startIndex
		int startIndex = (pageCurrent - 1) * pageSize;
		// 3.3)执行当前数据的查询操作
		List<GoodsVo> records = goodsDao.findGoodsObject(goodsName, startIndex, pageSize, categoryId);
		// 4.对分页信息以及当前页记录进行封装
		// 4.1)构建PageObject对象
		PageObject<GoodsVo> pageObject = new PageObject<>(pageCurrent, pageSize, rowCount, records);
		// 5.返回封装结果。
		return pageObject;
	}

	public int saveGoodsObject(Goods goods) {
		if (goods == null)
			throw new ServiceException("保存对象不能为空");
		if (StringUtils.isEmpty(goods.getGoodsName()))
			throw new ServiceException("商品名不能为空");
		int rows;
		//goods.setGoodsLogo("img/lists/up20.jpg");
		goods.setCreatedTime(new Date());
		goods.setModifiedTime(new Date());
		// 2.保存数据
		try {
			rows = goodsDao.insertGoodsObject(goods);
		} catch (Exception e) {
			e.printStackTrace();
			throw new ServiceException("保存失败");
		}
		// 3.返回数据
		return rows;

	}

	@Override
	public int validById(Integer id, Integer goodsStatus) {
		if (id == null || id <= 0)
			throw new ServiceException("参数不合法,id=" + id);
		if (goodsStatus != 1 && goodsStatus != 0)
			throw new ServiceException("参数不合法,goodsStatus=" + goodsStatus);
		int rows = goodsDao.validById(id, goodsStatus);
		//所有用户购物车的该商品状态也相应改变
		cartItemDao.updateCartItemGoodsStatus(id, goodsStatus);
		if (rows == 0)
			throw new ServiceException("此记录可能已经不存在了");
		return rows;
	}

	@Override
	public List<Category> findAllCategory() {
		List<Category> allCategory = goodsDao.findAllCategory();
		return allCategory;
	}

}
